The amount of information within a person's reach—either stored locally on their computer devices (desktop computer, handheld, mobile phone, etc.) or available to them via networks that their personal hardware is connected to—continues to increase. Locating the right information at the right time continues to be a challenging and frustrating problem for computer users. While the development of search engines has significantly increased the ability of computer users to discover or locate information, existing search engine technology still has various significant limitations, and it is frequently insufficient to help people locate the information they need.
Existing search engine technology works well in a narrow set of situations, such as when the user is able to provide search terms that precisely match the resources they are attempting to locate. As the number of resources that can be accessed and searched by computer users increases, however, the probability of being able to uniquely identify a resource via keyword terms decreases. Although link popularity metrics are very effective when one is looking for a popular resource on the internet, they are less useful when popularity is not a desired metric, and they fail almost completely for personal resources stored on a desktop computer or private network, where the resources are not generally hyperlinked. Thus, current desktop search algorithms in particular are generally only successful when the personal computer being searched has limited amounts of information, or when the user is able to come up with specific keyword terms that return a small number of search results.
Technologies exist to provide search results focused on a user's immediate context. Some search engine technologies use techniques to improve search results provided to a user based on personal information or preferences stored in a user profile. For example, U.S. Pat. No. 6,327,590 discloses a technique for determining a context of a search query based on a comparison of keyword terms with a user context profile. The search results are ranked based on the determined context for the search. In another example, U.S. Pat. No. 7,225,187 discloses methods for performing automated background search queries based on the ongoing activities of users, e.g., current application use. However, these technologies are limited in the amount of value that can be provided to the user. The limitations arise from two sources. First, in most cases the contexts are implicitly discovered and defined and do not match the user's own perception of their context. In other words, there are many “correct” ways to organize activity into contexts, and implicitly discovered contexts never completely match each individual's organization of their own activity into contexts. Thus search results presented to the user that the system believes to match the user's current context will not actually match the user's own perception of their current context. Second, most systems represent search contexts as keyword profiles or probability distributions across keywords. Such approaches have limited expressiveness, leading to either search results that are less specific (and thus less useful) then the non-contextualized search results, or lack of search results because the search is over-constrained.
U.S. patent application publication 20070162907 entitled “Methods for Assisting Computer Users Performing Multiple Tasks,” which is incorporated herein by reference, describes techniques for assisting and improving the productivity of computer users and relates specifically to computer-implemented methods for assisting users who switch between multiple tasks in a computing environment (FIG. 1). The method includes collecting from multiple executing programs event records that represent state changes in the programs. The event records may be collected, for example, by monitoring state changes in the multiple programs, selecting a subset of the monitored state changes, and generating event records representing this selected subset. The state changes in the programs may result from user interaction, automated processes, network communications, or other interactions between the programs and the computing environment. User interaction, for example, may include various forms of input received from the user, either locally or remotely, such as input resulting from user interaction with various programs or from direct user feedback, e.g., correcting predicted associations between tasks and resources. The method also includes receiving from the user a specification of a task being performed by the user, e.g., when a user switches tasks and elects to explicitly specify the task. The user may also specify metadata associated with the task, e.g., information about relationships between tasks or an indication of completion of a task.
Also included in the method is predicting a current task being performed by the user, e.g., applying machine learning algorithms to predict a most probable current task from stored evidence such as past associations between events and tasks. The current task may be predicted based on evidence including: i) a most recent event record, ii) a most recent specification received from the user of a task being performed by the user, and iii) past event records and associated task identifiers stored in a database. Other evidence may also be included such as time since the user last specified a task, past indications of completed tasks, tasks or keywords associated with resources related to the latest event, and explicit associations by the user between tasks and resources. Based on the predicted current task, user interface elements in multiple executing programs are automatically adapted to facilitate performing the current task. For example, the adaptation may include displaying a resource list (such as folders or directories) that contains resources associated with the predicted current task or that contains a menu of recently used resources filtered to favor resources associated with the predicted current task. The adaptation may also include displaying the predicted current task, e.g., in a menu bar of a window.